#ifndef __CORE_FEATURE_UARTX__
#define __CORE_FEATURE_UARTX__
/*!
 * @file     core_feature_uartx.h
 * @brief    UARTX feature API header file
 */
/*
 * UARTX Feature Configuration Macro:
 * 1. __UARTX_PRESENT:  Define whether UARTX is present or not
 *   * 0: Not present
 *   * 1: Present
 * 2. __UARTX_BASEADDR:  Base address of the UARTX.
 *
 */
#ifdef __cplusplus
extern "C" {
#endif

#include "core_feature_base.h"

#if defined(__UARTX_PRESENT) && (__UARTX_PRESENT == 1)
/**
 * \defgroup NMSIS_Core_UARTX_Registers     Register Define and Type Definitions Of UARTX
 * \ingroup NMSIS_Core_Registers
 * \brief   Type definitions and defines for uartx registers.
 *
 * @{
 */

/**
 * \brief  Union type to access UARTX Data register.
 */
typedef union
{
    struct {
        __IOM uint32_t data:8;         /*!< bit:     0..7 UARTX Received/Transmit Data */
        __IM  uint32_t _reserved0:24; 
    } b;                                        /*!< Structure used for bit  access */
    uint32_t w;                                 /*!< Type      used for word access */
} UARTXDATA_Type;

/**
 * \brief  Union type to access UARTX Status register.
 */
typedef union {
    struct {
        __IM  uint32_t tx_full:1;               /*!< bit:  0   Transmit Buffer Full */
        __IM  uint32_t rx_full:1;               /*!< bit:  1   Received Buffer Full */
        __IOM uint32_t tx_ovr:1;                /*!< bit:  2   Transmit Overrun*/
        __IOM uint32_t rx_ovr:1;                /*!< bit:  3   Received Overrun*/
        __IM  uint32_t _reserved0:28;           /*!< bit:  4..31  Reserved */
    } b;                                       /*!< Structure used for bit  access */
    __IM uint32_t w;                           /*!< Type      used for word access */
} UARTXSTATUS_Type;

/**
 * \brief  Union type to access UARTX Control register.
 */
typedef union {
    struct {
        __IOM uint32_t tx_en:1;          /*!< bit:  0   Transmit Enable */
        __IOM uint32_t rx_en:1;          /*!< bit:  1   Received Enable */
        __IOM uint32_t tx_ie:1;          /*!< bit:  2   Transmit Interrupt Enable */
        __IOM uint32_t rx_ie:1;          /*!< bit:  3   Received Interrupt Enable */
        __IOM uint32_t tx_ovr_ie:1;      /*!< bit:  4   Transmit Overrun Interrupt Enable */
        __IOM uint32_t rx_ovr_ie:1;      /*!< bit:  5   Received Overrun Interrupt Enable */
        __IOM uint32_t hs_test_en:1   ;  /*!< bit:  6   High-Speed Test Enable*/
        __IOM uint32_t _reserved0:25;    /*!< bit:  7..31  Reserved */
    } b;                                       /*!< Structure used for bit  access */
    __IOM uint32_t w;                          /*!< Type      used for word access */
} UARTXCTRL_Type;

/**
 * \brief  Union type to access UARTX Interrupt Status register.
 */
typedef union {
    struct {
        __IOM uint32_t tx_intr:1;          /*!< bit:  0   Transmit Interrupt */
        __IOM uint32_t rx_intr:1;          /*!< bit:  1   Received Interrupt */
        __IOM uint32_t tx_ovr_intr:1;      /*!< bit:  2   Transmit Overrun Interrupt */
        __IOM uint32_t rx_ovr_intr:1;      /*!< bit:  3   Received Overrun Interrupt */
        __IOM uint32_t _reserved0:25;      /*!< bit:  4..31  Reserved */
    } b;                                       /*!< Structure used for bit  access */
    __IOM uint32_t w;                          /*!< Type      used for word access */
} UARTXINTRSTATUS_Type;

/**
 * \brief  Union type to access UARTX Baudrate Divide register.
 */
typedef union {
    struct {
        __IOM uint32_t baud_div:20;        /*!< bit:   0..19  Baudrate divider */
        __IOM uint32_t _reserved0:12;      /*!< bit:  20..31  Reserved */
    } b;                                       /*!< Structure used for bit  access */
    __IOM uint32_t w;                          /*!< Type      used for word access */
} UARTXBAUDDIV_Type;



/**
 * \brief Access to the structure of UARTX Memory Map.
 */
typedef struct {
    __IOM uint32_t DATA;         /*!< Offset: 0x000 (R/W) UARTX Data Register */
    __IOM uint32_t STATUS;       /*!< Offset: 0x004 (R)   UARTX Status Register */
    __IOM uint32_t CTRL;         /*!< Offset: 0x008 (R/W) UARTX Control Register */
    __IOM uint32_t INTRSTATUS;   /*!< Offset: 0x00C (R/W) UARTX Interrupt Status Register */
    __IOM uint32_t BAUDDIV;      /*!< Offset: 0x010 (R/W) UARTX Buadrate Divider Register */
} UARTX_Type;

#define UARTX_DATA_Pos                           0U                                           /*!< UARTX DATA: DATA Position */
#define UARTX_DATA_Msk                           (0xFFUL << UARTX_DATA_Pos)                   /*!< UARTX DATA: DATA Mask */

#define UARTX_STATUS_TXFULL_Pos                  0U                                           /*!< UARTX STATUS: TXBUFFFULL Position */
#define UARTX_STATUS_TXFULL_Msk                  (0x1UL << UARTX_STATUS_TXFULL_Pos)           /*!< UARTX STATUS: TXBUFFFULL Mask */

#define UARTX_STATUS_RXFULL_Pos                  1U                                           /*!< UARTX STATUS: RXBUFFFULL Position */
#define UARTX_STATUS_RXFULL_Msk                  (0x1UL << UARTX_STATUS_RXFULL_Pos)           /*!< UARTX STATUS: RXBUFFFULL Mask */

#define UARTX_STATUS_TXOVR_Pos                   2U                                           /*!< UARTX STATUS: TXOVR Position */
#define UARTX_STATUS_TXOVR_Msk                   (0x1UL << UARTX_STATUS_TXOVR_Pos)            /*!< UARTX STATUS: TXOVR Mask */

#define UARTX_STATUS_RXOVR_Pos                   3U                                           /*!< UARTX STATUS: RXOVR Position */
#define UARTX_STATUS_RXOVR_Msk                   (0x1UL << UARTX_STATUS_RXOVR_Pos)            /*!< UARTX STATUS: RXOVR Mask */

#define UARTX_CTRL_TXEN_Pos                      0U                                           /*!< UARTX CTRL: TXEN Position */
#define UARTX_CTRL_TXEN_Msk                      (0x1UL << UARTX_CTRL_TXEN_Pos)               /*!< UARTX CTRL: TXEN Mask */

#define UARTX_CTRL_RXEN_Pos                      1U                                           /*!< UARTX CTRL: RXEN Position */
#define UARTX_CTRL_RXEN_Msk                      (0x1UL << UARTX_CTRL_RXEN_Pos)               /*!< UARTX CTRL: RXEN Mask */

#define UARTX_CTRL_TXIE_Pos                      2U                                           /*!< UARTX CTRL: TXIE Position */
#define UARTX_CTRL_TXIE_Msk                      (0x1UL << UARTX_CTRL_TXIE_Pos)               /*!< UARTX CTRL: TXIE Mask */

#define UARTX_CTRL_RXIE_Pos                      3U                                           /*!< UARTX CTRL: RXIE Position */
#define UARTX_CTRL_RXIE_Msk                      (0x1UL << UARTX_CTRL_RXIE_Pos)               /*!< UARTX CTRL: RXIE Mask */

#define UARTX_CTRL_TXOVRIE_Pos                   4U                                           /*!< UARTX CTRL: TXOVRIE Position */
#define UARTX_CTRL_TXOVRIE_Msk                   (0x1UL << UARTX_CTRL_TXOVRIE_Pos)            /*!< UARTX CTRL: TXOVRIE Mask */

#define UARTX_CTRL_RXOVRIE_Pos                   5U                                           /*!< UARTX CTRL: RXOVRIE Position */
#define UARTX_CTRL_RXOVRIE_Msk                   (0x1UL << UARTX_CTRL_RXOVRIE_Pos)            /*!< UARTX CTRL: RXOVRIE Mask */

#define UARTX_CTRL_HSTESTEN_Pos                  6U                                           /*!< UARTX CTRL: HSTESTEN Position */
#define UARTX_CTRL_HSTESTEN_Msk                  (0x1UL << UARTX_CTRL_HSTESTEN_Pos)           /*!< UARTX CTRL: HSTESTEN Mask */

#define UARTX_INTRSTATUS_TXINTR_Pos              0U                                           /*!< UARTX INTRSTATUS: TXINTR Position */
#define UARTX_INTRSTATUS_TXINTR_Msk              (0x1UL << UARTX_INTRSTATUS_TXINTR_Pos)       /*!< UARTX INTRSTATUS: TXINTR Mask */

#define UARTX_INTRSTATUS_RXINTR_Pos              1U                                           /*!< UARTX INTRSTATUS: RXINTR Position */
#define UARTX_INTRSTATUS_RXINTR_Msk              (0x1UL << UARTX_INTRSTATUS_RXINTR_Pos)       /*!< UARTX INTRSTATUS: RXINTR Mask */

#define UARTX_INTRSTATUS_TXOVRINTR_Pos           2U                                           /*!< UARTX INTRSTATUS: TXOVRINTR Position */
#define UARTX_INTRSTATUS_TXOVRINTR_Msk           (0x1UL << UARTX_INTRSTATUS_TXOVRINTR_Pos)    /*!< UARTX INTRSTATUS: TXOVRINTR Mask */

#define UARTX_INTRSTATUS_RXOVRINTR_Pos           3U                                           /*!< UARTX INTRSTATUS: RXOVRINTR Position */
#define UARTX_INTRSTATUS_RXOVRINTR_Msk           (0x1UL << UARTX_INTRSTATUS_RXOVRINTR_Pos)    /*!< UARTX INTRSTATUS: RXOVRINTR Mask */

#define UARTX_BAUDDIV_Pos                        0U                                           /*!< UARTX BAUDDIV: BAUDDIV Position */
#define UARTX_BAUDDIV_Msk                        (0xFFFFFUL << UARTX_BAUDDIV_Pos)             /*!< UARTX BAUDDIV: BAUDDIV Mask */


#ifndef __UARTX_BASEADDR
/* Base address of UARTX(__UARTX_BASEADDR) should be defined in <Device.h> */
#error "__UARTX_BASEADDR is not defined, please check!"
#endif

/* UARTX Memory mapping of Device */
#define UARTX_BASE                          __UARTX_BASEADDR                            /*!< UARTX Base Address */
#define UARTX                               ((UARTX_Type *) UARTX_BASE)                 /*!< UARTX configuration struct */

/** @} */ /* end of group NMSIS_Core_UARTX_Registers */

/* ##########################   UARTX functions  #################################### */
/**
 * \defgroup   NMSIS_Core_UARTX         
 * \brief Functions that manage send and receive data via the UARTX.
 *
 * @{
 */

#define UARTX_SetTxEn       __UARTX_SetTxEn
#define UARTX_ClrTxEn       __UARTX_ClrTxEn
#define UARTX_SetRxEn       __UARTX_SetRxEn
#define UARTX_ClrRxEn       __UARTX_ClrRxEn
#define UARTX_SetTxIE       __UARTX_SetTxIE
#define UARTX_ClrTxIE       __UARTX_ClrTxIE
#define UARTX_SetRxIE       __UARTX_SetRxIE
#define UARTX_ClrRxIE       __UARTX_ClrRxIE
#define UARTX_SetTxOvrIE    __UARTX_SetTxOvrIE
#define UARTX_ClrTxOvrIE    __UARTX_ClrTxOvrIE
#define UARTX_SetRxOvrIE    __UARTX_SetRxOvrIE
#define UARTX_ClrRxOvrIE    __UARTX_ClrRxOvrIE
#define UARTX_GetTxFull     __UARTX_GetTxFull
#define UARTX_GetRxFull     __UARTX_GetRxFull
#define UARTX_GetTxOvr      __UARTX_GetTxOvr
#define UARTX_GetRxOvr      __UARTX_GetRxOvr
#define UARTX_GetTxIntr     __UARTX_GetTxIntr
#define UARTX_ClrTxIntr     __UARTX_ClrTxIntr
#define UARTX_GetRxIntr     __UARTX_GetRxIntr
#define UARTX_ClrRxIntr     __UARTX_ClrRxIntr
#define UARTX_GetTxOvrIntr  __UARTX_GetTxOvrIntr
#define UARTX_ClrTxOvrIntr  __UARTX_ClrTxOvrIntr
#define UARTX_GetRxOvrIntr  __UARTX_GetRxOvrIntr
#define UARTX_ClrRxOvrIntr  __UARTX_ClrRxOvrIntr
#define UARTX_SetBaudRate   __UARTX_SetBaudRate
#define UARTX_Putchar       __UARTX_Putchar
#define UARTX_Getchar       __UARTX_Getchar



/**
 * \brief  Set UARTX Tx Enable
 * \details
 * This function set the the TXEN value of UARTXCTRL register.
 * \sa
 * - \ref UARTX_SetTxEn
 */

__STATIC_FORCEINLINE void __UARTX_SetTxEn(void)
{
    UARTX->CTRL |= UARTX_CTRL_TXEN_Msk;
}

/**
 * \brief  Clear UARTX Tx Enable
 * \details
 * This function clear the TXEN value of UARTXCTRL register.
 * \sa
 * - \ref UARTX_ClrTxEn
 */

__STATIC_FORCEINLINE void __UARTX_ClrTxEn(void)
{
    UARTX->CTRL &= ~UARTX_CTRL_TXEN_Msk;
}

/**
 * \brief  Set UARTX Rx Enable
 * \details
 * This function set the the RXEN value of UARTXCTRL register.
 * \sa
 * - \ref UARTX_SetRxEn
 */

__STATIC_FORCEINLINE void __UARTX_SetRxEn(void)
{
    UARTX->CTRL |= UARTX_CTRL_RXEN_Msk;
}

/**
 * \brief  Clear UARTX Rx Enable
 * \details
 * This function clear the RXEN value of UARTXCTRL register.
 * \sa
 * - \ref UARTX_ClrRxEn
 */

__STATIC_FORCEINLINE void __UARTX_ClrRxEn(void)
{
    UARTX->CTRL &= ~UARTX_CTRL_RXEN_Msk;
}

/**
 * \brief  Set UARTX Tx Interrupt Enable
 * \details
 * This function set the the TXIE value of UARTXCTRL register.
 * \sa
 * - \ref UARTX_SetTxIE
 */

__STATIC_FORCEINLINE void __UARTX_SetTxIE(void)
{
    UARTX->CTRL |= UARTX_CTRL_TXIE_Msk;
}

/**
 * \brief  Clear UARTX Tx Interrupt Enable
 * \details
 * This function clear the TXIE value of UARTXCTRL register.
 * \sa
 * - \ref UARTX_ClrTxIE
 */

__STATIC_FORCEINLINE void __UARTX_ClrTxIE(void)
{
    UARTX->CTRL &= ~UARTX_CTRL_TXIE_Msk;
}

/**
 * \brief  Set UARTX Rx Interrupt Enable
 * \details
 * This function set the the RXIE value of UARTXCTRL register.
 * \sa
 * - \ref UARTX_SetRxIE
 */

__STATIC_FORCEINLINE void __UARTX_SetRxIE(void)
{
    UARTX->CTRL |= UARTX_CTRL_RXIE_Msk;
}

/**
 * \brief  Clear UARTX Rx Interrupt Enable
 * \details
 * This function clear the RXIE value of UARTXCTRL register.
 * \sa
 * - \ref UARTX_ClrRxIE
 */

__STATIC_FORCEINLINE void __UARTX_ClrRxIE(void)
{
    UARTX->CTRL &= ~UARTX_CTRL_RXIE_Msk;
}

/**
 * \brief  Set UARTX Tx Overrun Interrupt Enable
 * \details
 * This function set the the TXOVRIE value of UARTXCTRL register.
 * \sa
 * - \ref UARTX_SetTxOvrIE
 */

__STATIC_FORCEINLINE void __UARTX_SetTxOvrIE(void)
{
    UARTX->CTRL |= UARTX_CTRL_TXOVRIE_Msk;
}

/**
 * \brief  Clear UARTX Tx Overrun Interrupt Enable
 * \details
 * This function clear the TXOVRIE value of UARTXCTRL register.
 * \sa
 * - \ref UARTX_ClrTxOvrIE
 */

__STATIC_FORCEINLINE void __UARTX_ClrTxOvrIE(void)
{
    UARTX->CTRL &= ~UARTX_CTRL_TXOVRIE_Msk;
}

/**
 * \brief  Set UARTX Rx Overrun Interrupt Enable
 * \details
 * This function set the the RXOVRIE value of UARTXCTRL register.
 * \sa
 * - \ref UARTX_SetRxOvrIE
 */

__STATIC_FORCEINLINE void __UARTX_SetRxOvrIE(void)
{
    UARTX->CTRL |= UARTX_CTRL_RXOVRIE_Msk;
}

/**
 * \brief  Clear UARTX Rx Overrun Interrupt Enable
 * \details
 * This function clear the RXOVRIE value of UARTXCTRL register.
 * \sa
 * - \ref UARTX_ClrRxOvrIE
 */

__STATIC_FORCEINLINE void __UARTX_ClrRxOvrIE(void)
{
    UARTX->CTRL &= ~UARTX_CTRL_RXOVRIE_Msk;
}

/**
 * \brief  Get TxFull Status
 * \details
 * This function get the TxFull Status of UARTXSTATUS register.
 * \return   TxFull of UARTXSTATUS register
 * \remarks
 * - TxBuffFull is used to indicate tx buffer is full or not
 * \sa
 * - \ref UARTX_GetTxFull
 */
__STATIC_FORCEINLINE uint32_t __UARTX_GetTxFull(void)
{
    return ((uint32_t)((UARTX->STATUS & UARTX_STATUS_TXFULL_Msk) >> UARTX_STATUS_TXFULL_Pos));
}

/**
 * \brief  Get RxFull Status
 * \details
 * This function get the RxFull Status of UARTXSTATUS register.
 * \return   RxFull of UARTXSTATUS register
 * \remarks
 * - RxFull is used to indicate rx buffer is full or not
 * \sa
 * - \ref UARTX_GetRxFull
 */
__STATIC_FORCEINLINE uint32_t __UARTX_GetRxFull(void)
{
    return ((uint32_t)((UARTX->STATUS & UARTX_STATUS_RXFULL_Msk) >> UARTX_STATUS_RXFULL_Pos));
}

/**
 * \brief  Get TxOvr Status
 * \details
 * This function get the TxOvr Status of UARTXSTATUS register.
 * \return   TxOvr of UARTXSTATUS register
 * \remarks
 * - TxOverrun is used to indicate tx is overrun or not
 * \sa
 * - \ref UARTX_GetTxOvr
 */
__STATIC_FORCEINLINE uint32_t __UARTX_GetTxOvr(void)
{
    return ((uint32_t)((UARTX->STATUS & UARTX_STATUS_TXOVR_Msk) >> UARTX_STATUS_TXOVR_Pos));
}

/**
 * \brief  Get RxOvr Status
 * \details
 * This function get the RxOvr Status of UARTXSTATUS register.
 * \return   RxOvr of UARTXSTATUS register
 * \remarks
 * - RxOverrun is used to indicate rx is overrun or not
 * \sa
 * - \ref UARTX_GetRxOvr
 */
__STATIC_FORCEINLINE uint32_t __UARTX_GetRxOvr(void)
{
    return ((uint32_t)((UARTX->STATUS & UARTX_STATUS_RXOVR_Msk) >> UARTX_STATUS_RXOVR_Pos));
}

/**
 * \brief  Get TxIntr Status
 * \details
 * This function get the TxIntr Status of UARTXINTRSTATUS register.
 * \return   TxIntr of UARTXINTRSTATUS register
 * \sa
 * - \ref UARTX_GetTxIntr
 */
__STATIC_FORCEINLINE uint32_t __UARTX_GetTxIntr(void)
{
    return ((uint32_t)((UARTX->INTRSTATUS & UARTX_INTRSTATUS_TXINTR_Msk) >> UARTX_INTRSTATUS_TXINTR_Pos));
}

/**
 * \brief  Clear TxIntr Status
 * \details
 * This function clear the TxIntr Status of UARTXINTRSTATUS register.
 * \sa
 * - \ref UARTX_ClrTxIntr
 */
__STATIC_FORCEINLINE void __UARTX_ClrTxIntr(void)
{
    UARTX->INTRSTATUS |= UARTX_INTRSTATUS_TXINTR_Msk;
}

/**
 * \brief  Get RxIntr Status
 * \details
 * This function get the RxIntr Status of UARTXINTRSTATUS register.
 * \return   RxIntr of UARTXINTRSTATUS register
 * \remarks
 * - RxIntr is used to indicate rx interrupt
 * \sa
 * - \ref UARTX_GetRxIntr
 */
__STATIC_FORCEINLINE uint32_t __UARTX_GetRxIntr(void)
{
    return ((uint32_t)((UARTX->INTRSTATUS & UARTX_INTRSTATUS_RXINTR_Msk) >> UARTX_INTRSTATUS_RXINTR_Pos));
}

/**
 * \brief  Clear RxIntr Status
 * \details
 * This function clear the RxIntr Status of UARTXINTRSTATUS register.
 * \sa
 * - \ref UARTX_ClrRxIntr
 */
__STATIC_FORCEINLINE void __UARTX_ClrRxIntr(void)
{
    UARTX->INTRSTATUS |= UARTX_INTRSTATUS_RXINTR_Msk;
}

/**
 * \brief  Get TxOvrIntr Status
 * \details
 * This function get the TxOvrIntr Status of UARTXINTRSTATUS register.
 * \return   TxOvrIntr of UARTXINTRSTATUS register
 * \remarks
 * - TxOvrIntr is used to indicate tx overrun interrupt
 * \sa
 * - \ref UARTX_GetTxOvrIntr
 */
__STATIC_FORCEINLINE uint32_t __UARTX_GetTxOvrIntr(void)
{
    return ((uint32_t)((UARTX->INTRSTATUS & UARTX_INTRSTATUS_TXOVRINTR_Msk) >> UARTX_INTRSTATUS_TXOVRINTR_Pos));
}

/**
 * \brief  Clear TxOvrIntr Status
 * \details
 * This function clear the TxOvrIntr Status of UARTXINTRSTATUS register.
 * \sa
 * - \ref UARTX_ClrOvrTxIntr
 */
__STATIC_FORCEINLINE void __UARTX_ClrTxOvrIntr(void)
{
    UARTX->INTRSTATUS |= UARTX_INTRSTATUS_TXOVRINTR_Msk;
}

/**
 * \brief  Get RxOvrIntr Status
 * \details
 * This function get the RxOvrIntr Status of UARTXSTATUS register.
 * \return   RxOvr of UARTXSTATUS register
 * \remarks
 * - RxOvrIntr is used to indicate rx buffer is full or not
 * \sa
 * - \ref UARTX_GetRxOvrIntr
 */
__STATIC_FORCEINLINE uint32_t __UARTX_GetRxOvrIntr(void)
{
    return ((uint32_t)((UARTX->STATUS & UARTX_INTRSTATUS_RXOVRINTR_Msk) >> UARTX_INTRSTATUS_RXOVRINTR_Pos));
}

/**
 * \brief  Clear RxOvrIntr Status
 * \details
 * This function clear the RxOvrIntr Status of UARTXINTRSTATUS register.
 * \sa
 * - \ref UARTX_ClrOvrRxIntr
 */
__STATIC_FORCEINLINE void __UARTX_ClrRxOvrIntr(void)
{
    UARTX->INTRSTATUS |= UARTX_INTRSTATUS_RXOVRINTR_Msk;
}

/**
 * \brief  UARTX Set Buadrate
 * \details
 * This function set the Baudrate of UARTX Transmit/Receive
 * \param [in]      freqHz
 * \param [in]      baudRate
 * \sa
 * - \ref UARTX_SetBaudRate
 */
__STATIC_FORCEINLINE void __UARTX_SetBaudRate(uint32_t freqHz, uint32_t baudRate)
{
    uint32_t baud_div = freqHz/baudRate;
    UARTX->BAUDDIV = baud_div & UARTX_BAUDDIV_Msk;
}

/**
 * \brief  UARTX Putchar
 * \details
 * This function transmit a byte via UARTX
 * \param [in]      ch
 * \sa
 * - \ref UARTX_Putchar
 */
__STATIC_FORCEINLINE void __UARTX_Putchar(uint8_t ch)
{
    while (__UARTX_GetTxFull());
    UARTX->DATA = (uint32_t)ch & UARTX_DATA_Msk;
    while (__UARTX_GetTxFull());
}

/**
 * \brief  UARTX Getchar
 * \details
 * This function receive a byte via UARTX
 * \return   UARTX receive byte
 * \sa
 * - \ref UARTX_Getchar
 */
__STATIC_FORCEINLINE uint8_t __UARTX_Getchar(void)
{
    while (!__UARTX_GetRxFull());
    return UARTX->DATA & UARTX_DATA_Msk;
}



/** @} */ /* End of Doxygen Group NMSIS_Core_UARTX */

#endif /* defined(__UARTX_PRESENT) && (__UARTX_PRESENT == 1) */

#ifdef __cplusplus
}
#endif
#endif /* __CORE_FEATURE_UARTX__ */
